Custom Resource Definition (CRD)
gpt-5.icon
基本の考え方
Kubernetes には標準で Pod, Deployment, Service などのリソースタイプが用意されています。
これらは API サーバーを通して YAML マニフェストで作成・管理されます。
CRDは、その仕組みを拡張して 自分専用のリソースタイプを定義する機能 です。
これにより、Kubernetes に存在しない独自のオブジェクト(例えば Database, Workflow, JobQueue など)を Kubernetes リソースとして扱えるようになります。
CRD の特徴
新しいリソースタイプを追加できる
例: MySQLCluster や AppConfig など。
kubectl で操作できる
例:
code:sh
kubectl get mysqlclusters
kubectl describe appconfig my-config
API サーバーに統合される
追加した CRD は apiextensions.k8s.io を通して API サーバーに登録され、Kubernetes の一等市民として振る舞う。
CRD と Controller
CRD 単体では「新しいリソースを定義できる」だけです。
そのリソースを見て「どう動くか」を決めるのは Controller (制御ループ) 側の実装です。
CRD = スキーマ(型定義)
Controller = それに基づいて処理を実行するロジック
たとえば Operator パターン では、CRD + Controller をセットで導入して、Kubernetes 上で複雑なアプリやシステムを自動的に管理できるようにします。
簡単な例
例えば「メッセージキュー」を管理する CRD を定義する場合:
CRD 定義 (抜粋)
code:yaml
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: messagequeues.sample.dev
spec:
group: sample.dev
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
size:
type: integer
scope: Namespaced
names:
plural: messagequeues
singular: messagequeue
kind: MessageQueue
shortNames:
- mq
これを適用すると MessageQueue というリソースが作れるようになります。
Custom Resource
code:yaml
apiVersion: sample.dev/v1
kind: MessageQueue
metadata:
name: my-queue
spec:
size: 3
これで kubectl get messagequeues とすると Kubernetes がこの新しいリソースを認識して管理できます。